var mapObj = {
    open: function(){ // 打开地图
        var city = $("#right_basic_city").val();
        var addr = $("#detailAddr").val();
        var lng = $("#addr-lng").val();
        var lat = $("#addr-lat").val();
        var self = this;
        layer.open({
            type: 1,
            closeBtn:2,
            title: ["<h3>选择地图</h3>", "font-size:14px; text-align:center; font-weight:600; padding-left: 60px;"],
            area: ['700px', '530px'],
            content: $('#map-wrap'), //这里content是一个DOM，注意：最好该元素要存放在body最外层，否则可能被其它的相对元素所影响
            success: function(layero, index){
                $('#map-wrap').css("display","block");
                $("#tipinput").focus();
                setSearchCity(city);
                // 地图定位优先级，经纬度 > 城市 > 无选项
                if(addr && lng && lat && addr !== "" && lng !== "" && lat !== ""){ // 有详细地址就去查询一次当前定位，并在输入框进行回填
                    self.regeocoder([lng, lat]);
                    $("#tipinput").val(addr);
                    return;
                }
                if(city && city !== ""){ // 只选择了省市区
                    map.setCity(city);
                    return;
                }
                self.showCityInfo(); // 什么都没做
            }
        });
    },
    close: function(type){ // 关闭地图
        if(type === "save" || type === "ok"){
            var lng = $("#map-lng").val(),
                lat = $("#map-lat").val(),
                province = $("#map-province").val(),
                city = $("#map-city").val(),
                area = $("#map-area").val();
            if(lng === "" || lat === ""){
                layer.msg("请选择定位地址！",{icon: 8});
                return;
            }
            this.removeMarker();
            if(type === "save"){ // 点击确定，获取type为text的文本框的值
                if($("#tipinput").val() === ""){
                    layer.msg("请输入地址！",{icon: 5});
                    return;
                }
                // 去除省市区的详情地址
                var sendaddr1 = $("#tipinput").val().toString();
                sendaddr1 = sendaddr1.replace(province, "").replace(city, "").replace(area, "");
                $("#detailAddr").val(sendaddr1);
            }
            if(type === "ok"){
                // 去除省市区的详情地址
                var sendaddr2 = $("#tip-title-addr").html().toString();
                sendaddr2 = sendaddr2.replace(province, "").replace(city, "").replace(area, "").replace("当前定位：","");
                $("#detailAddr").val(sendaddr2);
            }

            // 匹配省市区选中，遍历每一项的option，找到匹配的option然后设置选中
            $("#right_basic_prov").find("option").each(function(i){
                if(province.indexOf($(this).val()) > -1){
                    $(this).prop("selected",true);
                    cityList.getCity();
                }
            });
            $("#right_basic_city").find("option").each(function(i){
                if(city.indexOf($(this).val()) > -1){
                    $(this).prop("selected",true);
                    cityList.getArea();
                }
            });
            $("#right_basic_dist").find("option").each(function(i){
                if(area.indexOf($(this).val()) > -1){
                    $(this).prop("selected",true);
                }
            });
            $("#addr-lng").val(lng);
            $("#addr-lat").val(lat);
        }
        $("#tip-btn").addClass("not-click");
        $("#tip-title-addr").html("当前定位：请输入或选择地址");
        $("#tipinput").val("");
        $("#map-province").val("");
        $("#map-city").val("");
        $("#map-area").val("");
        $("#map-lng").val("");
        $("#map-lat").val("");
        $('#map-wrap').css("display","none");
        layer.closeAll();
    },
    select: function(e){ // 选中事件
        var obj =  $("#tipinput"), inputVal = $.trim(obj.val()), value = inputVal;
        mapObj.removeMarker();
        $("#tip-title-addr").html("当前定位："+e.poi.name);
        // this.geocoder(e.poi.district+e.poi.name); // 根据选中地址去查询坐标
        // placeSearch.search(e.poi.name);
        this.regeocoder([e.poi.location.lng, e.poi.location.lat]);
        // console.log(e);
        $("#tip-btn").removeClass("not-click");
    },
    removeMarker: function(){ // 清除点标记
        if (marker) {
            marker.setMap(null);
            marker = null;
        }
    },
    geocoder: function(addr){ // 解析地址，地址 -> 坐标
        var self = this;
        var geocoder = new AMap.Geocoder({
            city: document.getElementById("right_basic_city").value===""?"全国":document.getElementById("right_basic_city").value,
            radius: 1000 //范围，默认：500
        });
        //地理编码,返回地理编码结果
        geocoder.getLocation(addr, function(status, result) {
            if (status === 'complete' && result.info === 'OK') {
                self.geocoder_CallBack(result);
            }else{
                layer.msg("无法查询该地址！",{icon: 5});
            }
        });
    },
    geocoder_CallBack: function(data) { // 查询地址 -> 坐标成功后，返回查询坐标
        var resultStr = "";
        //地理编码结果数组
        var geocode = data.geocodes[0];
        mapObj.removeMarker();
        marker = new AMap.Marker({
            map: map,
            icon: "http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
            position: [geocode.location.lng, geocode.location.lat]
        });
        // 设置省市区和坐标
        var province = geocode.addressComponent.province,
            city = geocode.addressComponent.city,
            area = geocode.addressComponent.district;
        $("#map-province").val(province);
        $("#map-city").val(city);
        $("#map-area").val(area);
        $("#map-lng").val(geocode.location.lng);
        $("#map-lat").val(geocode.location.lat);
        map.setFitView();
    },
    regeocoder: function(lnglatXY){ // 解析坐标，坐标 -> 地址
        var self = this;
        var geocoder = new AMap.Geocoder({
            radius: 1000,
            extensions: "all"
        });
        geocoder.getAddress(lnglatXY, function(status, result) {
            if (status === 'complete' && result.info === 'OK') {
                self.regeocoder_CallBack(result);
            }
        });
        mapObj.removeMarker();
        marker = new AMap.Marker({  // 加点
            map: map,
            icon: "http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
            position: lnglatXY
        });
        // 设置坐标
        $("#map-lng").val(lnglatXY[0]);
        $("#map-lat").val(lnglatXY[1]);
        map.setFitView();
    },
    regeocoder_CallBack: function(data){ // 查询坐标 -> 地址成功后，返回查询地址
        // 返回地址描述，获取完整地址，身份，城市，区域
        var address = data.regeocode.formattedAddress, 
            province = data.regeocode.addressComponent.province,
            city = (data.regeocode.addressComponent.city === "")?province:data.regeocode.addressComponent.city,
            area = data.regeocode.addressComponent.district,
            input = $("#tipinput");
        $("#map-province").val(province);
        $("#map-city").val(city);
        $("#map-area").val(area);
        // input.val(address);
        $("#tip-title-addr").html("当前定位："+address);
    },
    showCityInfo: function() {
        //实例化城市查询类
        var citysearch = new AMap.CitySearch();
        //自动获取用户IP，返回当前城市
        citysearch.getLocalCity(function(status, result) {
            if (status === 'complete' && result.info === 'OK') {
                if (result && result.city && result.bounds) {
                    var cityinfo = result.city;
                    var citybounds = result.bounds;
                    //地图显示当前城市
                    map.setBounds(citybounds);
                }
            }
        });
    }
}

$(function(){
    layer.config({ // 配置layer关闭右上角关闭事件
        cancel: mapObj.close.bind(mapObj)
    });

    $("#detailAddr").click(mapObj.open.bind(mapObj));
    $("#detailAddr-icon").click(mapObj.open.bind(mapObj));

    $("#tipinput").keydown(function(e){ // 搜索框回车事件
        if(e.keyCode === 13){
            mapObj.removeMarker();
            mapObj.geocoder($.trim($("#tipinput").val()));
        }
    });

    $("#map-input-search").click(function(){ // 搜索按钮
        mapObj.removeMarker();
        mapObj.geocoder($.trim($("#tipinput").val()));
    });
    $("#tip-btn").click(function(){ // 使用地址
        if($("#tip-title-addr").html() === "当前定位：请输入或选择地址" || $(this).hasClass("not-click")){
            return;
        }
        mapObj.close("ok");
    }); 
    // 确定使用地址
    $("#save-addr").click(mapObj.close.bind(mapObj, "save")); // 使用自输入地址
    $("#cacel-addr").click(mapObj.close.bind(mapObj));

});

var marker, map = new AMap.Map("container", {
    resizeEnable: true,
    zoom: 13
});
var placeSearch = new AMap.PlaceSearch({
    map:map
});
// setSearchCity('');
function setSearchCity(_city) {
    var autoOptions = { // 输入提示
        input: "tipinput",
        city:_city
    };
    var auto = new AMap.Autocomplete(autoOptions);
    AMap.event.addListener(auto, "select", mapObj.select.bind(mapObj));//注册监听，当选中某条记录时会触发
}
map.on('click', function(e) { // 地图点击事件
    var lng = e.lnglat.getLng(), // 经度
        lat = e.lnglat.getLat(); // 纬度
    mapObj.removeMarker();
    $("#tip-btn").removeClass("not-click");
    mapObj.regeocoder([lng, lat]);
});